package org.yh.demo.algorithm;

public class TestClass {

    static int indexOf(String a, String b){
        if(a == null || b == null){
            return -1;
        }
        if(a.length() == 0 || b.length() == 0){
            return -1;
        }

        char[] source = a.toCharArray();
        char[] target = b.toCharArray();

        for(int i=0; i < source.length; i++){
            // 判断目标字符串首字符是否匹配
            if(source[i] == target[0]){
                int j = 1;
                // 如果首字符匹配则继续遍历目标字符串后续字符是否匹配
                for(;j<target.length;j++){
                    if(target[j] != source[i+j]){
                        // 如果目标字符串与当前子串存在不相等的字符，则退出；继续下一个子串比较
                        break;
                    }
                }

                if(j == target.length){
                    // 如果目标字符串全部遍历完毕，则返回当前源字符串中i所在的位置
                    // 仅检索了首次出现位置
                    return i;
                }
            }
        }
        // 找不到匹配的则返回-1
        return -1;
    }

    static class Node{
        Node next;
        int val;
        Node(int val, Node next){
            this.val = val;
            this.next = next;
        }
    }

    static Node removeLastN(Node head, int n){

        if(head == null){
            return null;
        }

        if(n <= 0){
            return head;
        }

        Node first = head;

        // 在当前链表前补一个空白头节点
        Node tmpNode = new Node(0, head);
        Node second = tmpNode;

        // 1号指针先移动N
        for(int i=0; i < n; i++){
            if(first==null){
                // n超出链表长度范围了
                return head;
            }
            first = first.next;
        }

        // 同时移动两个指针,当1号指针出界时2号指针刚好在倒数N+1位置
        while(first!=null){
            first = first.next;
            second = second.next;
        }

        // 让2号该节点指向被清除节点的下一个节点
        // 并将要忽略的节点next清除
        second.next = second.next.next;
        if(second.next != null){
            second.next.next = null;
        }

        head = tmpNode.next;
        // 清除补充的临时头节点
        tmpNode.next = null;
        tmpNode = null;
        return head;
    }

    public static void main(String[] args) {

/*        System.out.println(indexOf("aaba", "ab"));

        Node node = new Node(1, null);
        Node node1 = new Node(2, node);
        Node node2 = new Node(3, node1);
        Node aa = removeLastN(node2,1);

        System.out.println(indexOf("aaba", "ab"));*/

        long a = 1;
        System.out.println((1<<1)|(1<<2)|(1<<2));

    }
}
